package main

import (
	"fmt"
	"regexp"
	"strings"
)

func pwdtest(pwd string) int {
	var score = 2
	//判断密码长度是否大于8
	if len(pwd) < 9 {
		fmt.Println("密码长度小于9")
	} else {
		score++
	}
	//判断密码是否由至少三种不同字符构成
	num1 := 0
	List := []string{`[0-9]+`, `[a-z]+`, `[A-Z]+`, `[.,<>:;\/|{}"'~·@$!%*#_~?&^]+`}
	for _, i := range List {
		match, _ := regexp.MatchString(i, pwd)
		if match {
			num1++
		}
	}
	if num1 < 3 {
		fmt.Println("密码必须由大、小写字母、数字以及其他符合以上四种至少三种组成")
	} else {
		score++
	}
	//判断密码是否有长度超过或等于3的子串重复
	flag := 1
	for i := 0; i+3 <= len(pwd); i++ {
		repeat := pwd[i : i+3]
		if strings.Contains(pwd[i+1:], repeat) {
			fmt.Println("密码有长度超过或等于3的子串重复")
			flag = 0
			break
		}
	}
	if flag == 1 {
		score++
	}
	return score
}

func main() {
	var passwrd string
	fmt.Println("请设置您的密码：")
	fmt.Scanln(&passwrd)
	pwdlevel := pwdtest(passwrd)
	fmt.Printf("该密码的复杂等级评分为：%d 分", pwdlevel)
}
